M=50;
D=30;
maxGen=10;
C1=2;
C2=2;
bound=[-100,100];
Vmax=0.1*(bound(2)-bound(1));%搜索空间上界-下界即搜索空间大小
X=zeros(M,D);%位置矩阵_初始化
V=zeros(M,D);%速度矩阵
for i=1:M%每次初始化一个例子
    for j=1:D
        X(i,j)=bound(1)+rand*(bound(2)-bound(1));
        V(i,j)=-Vmax+2*rand*Vmax;
    end
    fit=[fit,fun(X(i,:))];%追加
end

pbest=zeros(M,D);%用来存每个粒子经过的最优位置
pbestfit=[];
gbest=zeros(1:d);%用来存所有粒子经过的最优位置，仅一个
gbestfit=inf;%设置为无穷大
gbest=X(opXindex,:);
gbestfit=opfit;
opValue=[opValue,opfit];
t=1;

for g=2:maxGen
    for i=1:M
        for j=1:D
            V(i,j)=V(i,j)+C1*rand*(pbest(i,j)-X(i,j))+C2*rand*(gbest(j)-X(i,j));
            
        end
        X(i,j)=X(i,:)+V(i,:);
        fit(i)=fun(X(i,:));
        %更新粒子最优
        if fit(i)<pbestfit
            pbest=X(i,:);
            pbestfit=fit(i);
        end

        %更新
        if fit(i)<gbestfit
            gbest=X(i,:);
            gbestfit=fit(i);
        end
    end
    opValue=[optValue,opfit];
end
plot(opValue)

%适应度函数
function fit=fun(x)
D=length(x);
fit=0;
for i:D
    fit=fit+x(i)^2;
end
end

